package com.chmingx.JavaBasic.thread.sync;

/**
 * synchronized
 * 演示进程间通信
 */
public class Share {
    private int number = 0;

    /**
     * 判断 -> 干活 -> 通知其他线程
     */
    public synchronized void incr() throws InterruptedException {
        while (number != 0) { // 判断number是否为0，如果不是0，则等待
            // 将判断写到while循环中，防止虚假唤醒， 因为if只会判断一次
            this.wait(); // 线程进入等待，释放锁
        }
        // 如果number值为0，就加一
        number++;
        System.out.println(Thread.currentThread().getName() + "::" + number);
        // 通知其他线程，释放锁
        this.notifyAll();
    }

    public synchronized void decr() throws InterruptedException {
        while (number != 1) { // 判断number是否为1，如果不是1，则等待
            this.wait(); // 线程进入等待，释放锁
        }
        // 如果number值为1，就减一
        number--;
        System.out.println(Thread.currentThread().getName() + "::" + number);
        // 通知其他线程，释放锁
        this.notifyAll();
    }
}
